package 每日一题;

public class No1004最大连续1的个数III {

    /**
     * 给定一个由若干 0 和 1 组成的数组 A，我们最多可以将 K 个值从 0 变成 1 。
     * 返回仅包含 1 的最长（连续）子数组的长度。
     *
     * 示例 1：
     * 输入：A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
     * 输出：6
     * 解释：
     * [1,1,1,0,0,1,1,1,1,1,1]
     * 粗体数字从 0 翻转到 1，最长的子数组长度为 6。
     * 示例 2：
     * 输入：A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
     * 输出：10
     * 解释：
     * [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
     * 粗体数字从 0 翻转到 1，最长的子数组长度为 10。
     *  
     * 提示：
     * 1 <= A.length <= 20000
     * 0 <= K <= A.length
     * A[i] 为 0 或 1 
     */

    public int longestOnes(int[] A, int K) {

        int left=0;
        int right=0;

        while (right<A.length){

            //1,1,1,0,0,0,1,1,1,1,0
            if(K<0){
                if(A[left]==0){
                    K++;
                }
                left++;
            }

            //优化点:如果将此if提到上一个if之前,就无需在while外部进行一个if
            if(A[right]==0){
                K--;
            }

            right++;

        }

        if(K<0){
            left++;
        }

        return right-left;
    }

    public static void main(String[] args) {
        No1004最大连续1的个数III n=new No1004最大连续1的个数III();
        int[] arr={1,1,1,0,0,0,1,1,1,1,0};
        int result = n.longestOnes(arr, 2);
        System.out.println(result);
    }

}
